package com.seleniti.enpareja.controller.ui.view;

import org.ioc.commons.flowcontrol.actioncontroller.IsExternalAction;
import org.ioc.commons.flowcontrol.eventbus.IsEvent;
import org.ioc.commons.flowcontrol.operationmanager.IsOperation;
import org.ioc.commons.ui.HasLoader;
import org.ioc.commons.ui.HasPagedDataProvider;
import org.ioc.commons.ui.HasVisibility;
import org.ioc.commons.ui.IsView;
import org.ioc.commons.ui.IsViewPresenter;
import org.ioc.commons.ui.features.Info;

import com.seleniti.enpareja.controller.model.integration.database.domain.CoupleRequest;

public interface GetCoupleView extends EnParejaView<GetCoupleView.Event, GetCoupleView.Operation, GetCoupleView.Action>, HasPagedDataProvider<CoupleRequest>, HasLoader {
	@interface Fires {
		GetCoupleView.Event[] value();
	}

	@interface Invokes {
		GetCoupleView.Action[] value();
	}

	@interface Performs {
		GetCoupleView.Operation[] value();
	}

	public enum Event implements IsEvent {
	}

	public enum Operation implements IsOperation {
		GettingCoupleRequests, MakingCouple, DismissingCoupleRequest
	}

	public enum Action implements IsExternalAction {
	}

	public interface Presenter extends IsViewPresenter {

		void onGetCoupleNow();

		void onSelectedCoupleRequestChanged();

		void onDismissSelectedRequest();

		void onRejectSelectedRequest();
	}

	void startSearch();

	CoupleRequest getSelectedCoupleRequest();

	HasVisibility pendingActions();

	HasVisibility stillPendingActions();

	HasVisibility rejectedActions();

	void clearSelection();

	Info coupleGotInfo();

	
}
